﻿#include "qtdemo.h"
#include "ui_qtdemo.h"
#include <QScreen>
#include <QDesktopServices>
#include <QDebug>

QtDemo::QtDemo(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::QtDemo)
{
    ui->setupUi(this);

    connect(ui->pushButton,&QPushButton::clicked,this,&QtDemo::ButtonFunc);
    connect(ui->pushButton_2,&QPushButton::clicked,this,&QtDemo::QCedButtonFunc);
    connect(ui->pushButton_3,&QPushButton::clicked,this,&QtDemo::OpenOuterWeb);
    InitUi();
}

void QtDemo::InitUi()
{
//    setStyleSheet();
    setWindowTitle("QtDemo-Title");

    QScreen *screen = QGuiApplication::primaryScreen();
    QRect screenGeometry = screen->geometry();
    display_ratio = screenGeometry.height()*1.0/screenGeometry.width();
    QString info = QString("当前屏幕尺寸: %1x%2，比例：%3").arg(screenGeometry.width()).arg(screenGeometry.height()).arg(display_ratio);
    qDebug() << info;
    int display_width = 1680;
    resize(display_width,int(display_width*display_ratio));

//    展示界面
    ui->widget->setStyleSheet("background: rgb(45,55,65);");
    ui->widget->setMinimumWidth(300);
    ui->widget->setFixedSize(int(0.8*display_width),int(display_width*display_ratio*0.8));
//    ui->widget->hide();
    m_layout = new QVBoxLayout(ui->widget);


//    button
    ui->pushButton->setFixedWidth(150);
    ui->pushButton->setFixedHeight(60);

    ui->lineEdit->setFixedHeight(60);
    ui->lineEdit->setText("https://cn.bing.com/?FORM=BEHPTB");

    m_webView = nullptr;
    m_cefView = nullptr;

}

void QtDemo::ButtonFunc()
{
//    this->resize(1080,int(1080*QtDemo::display_ratio));
    DisplayWeb();
    ShowWebVersion();
}

void QtDemo::QCedButtonFunc()
{
//    QCefDisplay();
//    cefView依赖环境与vs2013不匹配
//    ShowWebVersion();
}

void QtDemo::OpenOuterWeb()
{
    QString url = ui->lineEdit->text();

    bool success = QDesktopServices::openUrl(QUrl(url));
    if (!success) {
        // 处理打开失败的情况
        qWarning() << "Failed to open the URL";
    }
}


void QtDemo::QCefDisplay()
{
    if (m_cefView == nullptr) {
        m_cefView = new QCefView(ui->widget);
        qDebug() << "m_cefView 创建成功";
        // 假设QCefView有setZoomFactor方法
//                m_cefView->setZoomFactor(m_currentZoomFactor); // 初始化缩放比例
    } else {
        qDebug() << "m_cefView yicun";
    }
    if (m_layout->indexOf(m_cefView) == -1) {
            m_layout->addWidget(m_cefView);
        }

    m_cefView->navigateToUrl(ui->lineEdit->text());
    if (m_webView) m_webView->hide();
}

void QtDemo::DisplayWeb()
{
    if (m_webView == nullptr) {
        m_webView = new QWebEngineView(ui->widget);
        qDebug() << "m_webView 创建成功";
        m_webView->setZoomFactor(m_currentZoomFactor); // 初始化缩放比例
    } else {
        qDebug() << "m_webView yicun";
    }
    if (m_layout->indexOf(m_webView) == -1) {
            m_layout->addWidget(m_webView);
        }
    m_webView->load(QUrl(ui->lineEdit->text()));
    m_webView->show();

    if (m_cefView) m_cefView->hide();
}

void QtDemo::ShowWebVersion()
{
    m_webView->page()->runJavaScript("navigator.userAgent;", [](const QVariant &result)
    {
        if (result.isValid())
        {
            QString userAgent = result.toString();
            qDebug() << "User Agent:" << userAgent;
            // qt5.6.3 Chrome/45.0.2454.101 Safari/537.36"
//            5.12.12 Chrome/69.0.3497.128
//            5.14.2 Chrome/77.0.3865.129
        }
    });
}

// 重写键盘事件处理函数
void QtDemo::keyPressEvent(QKeyEvent *event)
{
    // 检查是否按下了Ctrl键
    if (event->modifiers() & Qt::ControlModifier) {
        switch (event->key()) {
        case Qt::Key_Plus:       // Ctrl + "+" 放大
            zoomIn();
            event->accept();
            return;
        case Qt::Key_Minus:      // Ctrl + "-" 缩小
            zoomOut();
            event->accept();
            return;
        case Qt::Key_0:          // Ctrl + "0" 重置缩放
            resetZoom();
            event->accept();
            return;
        case Qt::Key_Equal:      // Ctrl + "=" (有些键盘上+和=是同一个键)
            zoomIn();
            event->accept();
            return;
        }
    }

    // 其他按键交给基类处理
    QWidget::keyPressEvent(event);
}

// 放大网页
void QtDemo::zoomIn()
{
    double newZoom = qMin(m_currentZoomFactor + ZOOM_STEP, MAX_ZOOM);
    setZoomFactor(newZoom);
}

// 缩小网页
void QtDemo::zoomOut()
{
    double newZoom = qMax(m_currentZoomFactor - ZOOM_STEP, MIN_ZOOM);
    setZoomFactor(newZoom);
}

// 重置缩放
void QtDemo::resetZoom()
{
    setZoomFactor(1.0);
}

// 设置缩放比例（统一处理两种视图）
void QtDemo::setZoomFactor(double zoomFactor)
{
    if (zoomFactor == m_currentZoomFactor) return;

    m_currentZoomFactor = zoomFactor;

    // 根据当前显示的视图类型应用缩放
    if (m_webView && m_webView->isVisible()) {
        // WebEngineView缩放
        m_webView->page()->setZoomFactor(zoomFactor);
    } else if (m_cefView && m_cefView->isVisible()) {
        // QCefView缩放（需要根据QCefView的API调整）
        // 假设QCefView有setZoomFactor方法
//        m_cefView->setZoomFactor(zoomFactor);

        // 如果QCefView没有直接方法，可以使用JavaScript
        // QString script = QString("document.body.style.zoom = '%1'").arg(zoomFactor * 100);
        // m_cefView->executeJavaScript(script);
    }

    // 可选：在界面上显示当前缩放比例
//    ui->statusLabel->setText(QString("缩放: %1%").arg(zoomFactor * 100));
}

QtDemo::~QtDemo()
{
    delete ui;
}
